package com.ng.desktop.fpa.persistence;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.ng.desktop.fpa.model.DetalleFactura;
import com.ng.desktop.fpa.model.FacturaDBF;
import com.ng.framework.persistence.NGGenericPersistenceJPA;

@Repository("detalleFacturaPersistenceHB")
public class DetalleFacturaPersistenceHB extends NGGenericPersistenceJPA<DetalleFactura> {

	public List<DetalleFactura> getAll(List<FacturaDBF> facturas) {

		StringBuilder inQuery = new StringBuilder();
		for (int i = 0; i < facturas.size(); i++) {

			FacturaDBF facturaDBF = facturas.get(i);
			inQuery.append("'");
			inQuery.append(facturaDBF.getKey());
			inQuery.append("'");
			if (i < facturas.size() - 1) {
				inQuery.append(",");
			}

		}

		final StringBuilder queryHQL = new StringBuilder();

		queryHQL.append("SELECT  " + this.getClasePersistente().getSimpleName());
		queryHQL.append(" FROM " + this.getClasePersistente().getName());
		queryHQL.append(" " + this.getClasePersistente().getSimpleName());

		queryHQL.append(" WHERE ");

		queryHQL.append(this.getClasePersistente().getSimpleName());
		queryHQL.append(".factura IN (");
		queryHQL.append(inQuery.toString());
		queryHQL.append(")");

		return getHibernateTemplate().find(queryHQL.toString());

	}

	public List<DetalleFactura> getAllAnulados() {

		final StringBuilder queryHQL = new StringBuilder();

		queryHQL.append("SELECT  " + this.getClasePersistente().getSimpleName());
		queryHQL.append(" FROM " + this.getClasePersistente().getName());
		queryHQL.append(" " + this.getClasePersistente().getSimpleName());

		queryHQL.append(" WHERE ");

		queryHQL.append(this.getClasePersistente().getSimpleName());
		queryHQL.append(".estado LIKE  '%");
		queryHQL.append(DetalleFactura.ESTADO_ANULADO);
		queryHQL.append("%'");

		return getHibernateTemplate().find(queryHQL.toString());

	}

	public void deleteAll() {

		final StringBuilder queryHQL = new StringBuilder();

		queryHQL.append("DELETE FROM ");
		queryHQL.append(this.getClasePersistente().getName());

		getHibernateTemplate().bulkUpdate(queryHQL.toString());

	}
}
